package application;

import java.util.ArrayList;

/**
 * @author Krystian
 * @author siwy
 */

public class Node {
	private ArrayList<Integer> adjacentNodes = new ArrayList<Integer>();
	private ArrayList<Integer> possibleColors = new ArrayList<Integer>();

	/** Konstruktor */
	public Node() {

	}

	/** Konstruktor do kolonowania wierzcholkow */
	@SuppressWarnings("unchecked")
	public Node(Node node) {
		this.adjacentNodes = (ArrayList<Integer>) node.getAdjacentNodes()
				.clone();
		this.possibleColors = (ArrayList<Integer>) node.getPossibleColors()
				.clone();
	}

	/** Wstawia sasiadujacy wierzcholek */
	public void insertAdjacentNode(int nodeIndex) {
		adjacentNodes.add(nodeIndex);
	}

	/** Wstawia mozliwy do przyjecia kolor */
	public void insertColor(int colorIndex) {
		possibleColors.add(colorIndex);
	}

	/** Zwraca liste sasiadujacych wierzcholkow */
	public ArrayList<Integer> getAdjacentNodes() {
		return adjacentNodes;
	}

	/** Zwraca liste mozliwych kolorow */
	public ArrayList<Integer> getPossibleColors() {
		return possibleColors;
	}

	/** Zwraca czy wierzcholek o podanym id jest sasiadem */
	public boolean hasAdjacentNode(int adjacentNode) {
		if (adjacentNodes.contains(adjacentNode)) {
			return true;
		} else {
			return false;
		}
	}

	/** Zwraca czy podany kolor moze byc przyjety przez wierzcholek */
	public boolean hasPossibleColor(int colorValue) {
		if (possibleColors.contains(colorValue)) {
			return true;
		} else {
			return false;
		}
	}

	/** Zwraca liczbe wierzcholkow sasiadujacych */
	public int getNodeDegree() {
		return adjacentNodes.size();
	}

	/** Usuwa wierzcholek o podanym id z listy sasiadow */
	public void removeAdjacentNode(int adjacentNode) {
		adjacentNodes.remove(adjacentNodes.indexOf(adjacentNode));
	}

	/**
	 * Zwraca w postaci Stringa listę sąsiadujących wierzchołków oraz listę
	 * możliwych do przyjęcia kolorów
	 */
	@Override
	public String toString() {
		return "Adjacent Nodes: " + adjacentNodes.toString() + " Colors: "
				+ possibleColors.toString();
	}

}